################################
#
#     Makefile BRIS (progetto lso 2013)
#     (fram 1)(fram 2)(fram 3)
################################

# ***** DA COMPLETARE ******  con i file da consegnare *.c e *.h     
# primo frammento 
FILE_DA_CONSEGNARE1=bris.c users.c

# secondo frammento 
FILE_DA_CONSEGNARE2=

# terzo frammento
FILE_DA_CONSEGNARE3=

# Compilatore
CC= gcc
# Flag di compilazione
CFLAGS = -Wall -pedantic -g

# Librerie 
# Directory in cui si trovano le librerie
LIBDIR = ../lib
# Opzione di linking
LIBS = -L $(LIBDIR)

# Nome libreria progetto
LIBNAME1 = libbris.a

# Oggetti libreria $(LIBNAME1)
# DA COMPLETARE (se si usano altri file sorgente)

# Determina l'architettura della macchina (32 o 64 bit) 
ARCH=$(shell uname -m)

# newMazzoObj contiene il nome del object file corretto

ifeq ($(ARCH), i686)                   # 32 bit
newMazzoObj = newMazzo_x86.o
else                                   # 64 bit
newMazzoObj = newMazzo_x86_64.o
endif

objects1 = $(newMazzoObj) users.o bris.o

# Nome eseguibili primo frammento
EXE1=bris1
EXE2=bris2
EXE3=bris3

.PHONY: clean lib test11 test12 test13 consegna1 docu


# creazione libreria 
lib:  $(objects1)
	-rm  -f $(LIBNAME1)
	-mkdir ../lib
	-rm  -f $(LIBDIR)/$(LIBNAME1)
	ar -r $(LIBNAME1) $(objects1)
	cp $(LIBNAME1) $(LIBDIR)


###### Primo test 
bris1: test-one.o 
	$(CC) -o $@  $^ $(LIBS) -lbris

test-one.o: test-one.c bris.h 
	$(CC) $(CFLAGS) -c $<	 


###### Secondo test 
bris2: test-two.o 
	$(CC) -o $@  $^ $(LIBS) -lbris

test-two.o: test-two.c users.h bris.h
	$(CC) $(CFLAGS) -c $<	 

###### Terzo test 
bris3: test-three.o 
	$(CC) -o $@  $^ $(LIBS) -lbris

test-three.o: test-three.c users.h bris.h
	$(CC) $(CFLAGS) -c $<	 

#make rule per gli altri .o del primo frammento (***DA COMPLETARE***)






########### NON MODIFICARE DA QUA IN POI ################
# genera la documentazione con doxygen
docu: ../doc/Doxyfile
	make -C ../doc/

#ripulisce  l'ambiente (cancella tutti gli object file tranne newMazzo_x86.o e newMazzo_x86_64.o)
clean:
	find . -name "*.o" ! -name "newMazzo_x86*" -print -exec rm {} \; 



MTRACEFILE=./bris.log
FILEMAZZO=./mazzo1.out
test11: 
	make clean
	make lib
	make $(EXE1)
	-rm $(FILEMAZZO) $(FILEMAZZO).check
	cp DATA/$(FILEMAZZO).check .
	chmod 644 $(FILEMAZZO).check	
	-rm -fr $(MTRACEFILE)
	MALLOC_TRACE=$(MTRACEFILE) ./$(EXE1)
	mtrace ./$(EXE1) $(MTRACEFILE)
	diff $(FILEMAZZO) $(FILEMAZZO).check
	@echo "********** Test11 superato!"


MTRACEFILE=./bris.log
test12: 
	make clean
	make lib
	make $(EXE2)
	-rm -fr $(MTRACEFILE)
	MALLOC_TRACE=$(MTRACEFILE) ./$(EXE2)
	mtrace ./$(EXE2) $(MTRACEFILE)
	@echo "********** Test12 superato!"


FILETEST2=./users1.txt
FILETEST3=./users2.txt
test13: 
	make clean
	make lib
	make $(EXE3)
	-rm -fr $(MTRACEFILE)
	-rm $(FILETEST2) $(FILETEST3) $(FILETEST2).sort $(FILETEST3).sort
	cp DATA/$(FILETEST2) .
	chmod 644 $(FILETEST2)
	-rm -fr $(MTRACEFILE)
	MALLOC_TRACE=$(MTRACEFILE) ./$(EXE3)
	mtrace ./$(EXE3) $(MTRACEFILE)
	sort < $(FILETEST2) >$(FILETEST2).sort
	sort < $(FILETEST3) >$(FILETEST3).sort
	diff $(FILETEST2).sort $(FILETEST3).sort
	@echo "********** Test13 superato!"


SUBJECT1="lso13: consegna primo frammento"
ADDRESS="susanna.pelagatti@gmail.com"
# target di consegna del primo frammento
# effettua i test e prepara il tar per la consegna
consegna1:
	make clean
	make test11
	make test12
	make test13
	./gruppo-check.pl < gruppo.txt
	tar -cvf $(USER)-f1.tar ./gruppo.txt ./Makefile $(FILE_DA_CONSEGNARE1) 
	@echo "*** PRIMO FRAMMENTO: TAR PRONTO $(USER)-f1.tar ***"
	@echo "*** inviare per email a $(ADDRESS) con subject\n \"$(SUBJECT1)\" ***"

